<?php
/**
 * Maps fields from html form to database fields from WPTResult table
 */
function mapFields($fieldsArray) {

    $mappedArray = array();

    foreach ($fieldsArray as $value) {
        $mappedArray[] = mapMetricFieldForm2Db($value);
    }

    return $mappedArray;
}

function mapMetricFieldForm2Db($fieldName) {
    $mappingArray = getMetricsFieldsMappingsForm2Db();
    if(array_key_exists($fieldName, $mappingArray)) {
        return $mappingArray[$fieldName];
    }else {
        throw new Exception("Unknown form field name $fieldName", 1);
    }
}

function mapMetricFieldDb2Form($fieldName){
    $mappingArray = getMetricsFieldsMappingsDb2Form();
    if(key_exists($fieldName, $mappingArray)) {
        return $mappingArray[$fieldName];
    }else {
        throw new Exception("Unknown form field name $fieldName", 1);
    }
}

function getMetricsFieldsMappingsForm2Db() {
    return array(
        'FV_TTFB'     => 'AvgFirstViewFirstByte',
        'FV_Render'   => 'AvgFirstViewStartRender',
        'FV_Doc'      => 'AvgFirstViewDocCompleteTime',
        'FV_Dom'      => 'AvgFirstViewDomTime',
        'FV_Fully'    => 'AvgFirstViewFullyLoadedTime',
        'RV_TTFB'     => 'AvgRepeatViewFirstByte',
        'RV_Render'   => 'AvgRepeatViewStartRender',
        'RV_Doc'      => 'AvgRepeatViewDocCompleteTime',
        'RV_Dom'      => 'AvgRepeatViewDomTime',
        'RV_Fully'    => 'AvgRepeatViewFullyLoadedTime'
    );
}

function getMetricsFieldsMappingsDb2Form(){
    return array_flip(getMetricsFieldsMappingsForm2Db());
}

function addTimestamps($requestArray) {
    if(!array_key_exists('timeFrame', $requestArray) OR $requestArray['timeFrame'] == 0){
        $requestArray['startTimestamp'] = mktime($requestArray['startHour'], 0, 0, $requestArray['startMonth'], $requestArray['startDay'], $requestArray['startYear']);
        $requestArray['endTimestamp']   = mktime($requestArray['endHour'], 59, 59,   $requestArray['endMonth'],   $requestArray['endDay'],   $requestArray['endYear']);
    } else {
        $requestArray['endTimestamp'] = (int)gmdate('U') + 3600;
        $requestArray['startTimestamp'] = $requestArray['endTimestamp'] - $requestArray['timeFrame'];
        // FB::log($requestArray['endTimestamp'] - $requestArray['startTimestamp']);
    }

    $keysToDelete = array(
        'startHour',
        'startDay',
        'startMonth',
        'startYear',
        'endHour',
        'endDay',
        'endMonth',
        'endYear'
    );

    foreach ($keysToDelete as $value) {
        unset($requestArray[$value]);
    }

    return $requestArray;
}

function setHttpResponseCode($code = NULL) {

    switch ($code) {
        case 100: $text = 'Continue'; break;
        case 101: $text = 'Switching Protocols'; break;
        case 200: $text = 'OK'; break;
        case 201: $text = 'Created'; break;
        case 202: $text = 'Accepted'; break;
        case 203: $text = 'Non-Authoritative Information'; break;
        case 204: $text = 'No Content'; break;
        case 205: $text = 'Reset Content'; break;
        case 206: $text = 'Partial Content'; break;
        case 300: $text = 'Multiple Choices'; break;
        case 301: $text = 'Moved Permanently'; break;
        case 302: $text = 'Moved Temporarily'; break;
        case 303: $text = 'See Other'; break;
        case 304: $text = 'Not Modified'; break;
        case 305: $text = 'Use Proxy'; break;
        case 400: $text = 'Bad Request'; break;
        case 401: $text = 'Unauthorized'; break;
        case 402: $text = 'Payment Required'; break;
        case 403: $text = 'Forbidden'; break;
        case 404: $text = 'Not Found'; break;
        case 405: $text = 'Method Not Allowed'; break;
        case 406: $text = 'Not Acceptable'; break;
        case 407: $text = 'Proxy Authentication Required'; break;
        case 408: $text = 'Request Time-out'; break;
        case 409: $text = 'Conflict'; break;
        case 410: $text = 'Gone'; break;
        case 411: $text = 'Length Required'; break;
        case 412: $text = 'Precondition Failed'; break;
        case 413: $text = 'Request Entity Too Large'; break;
        case 414: $text = 'Request-URI Too Large'; break;
        case 415: $text = 'Unsupported Media Type'; break;
        case 500: $text = 'Internal Server Error'; break;
        case 501: $text = 'Not Implemented'; break;
        case 502: $text = 'Bad Gateway'; break;
        case 503: $text = 'Service Unavailable'; break;
        case 504: $text = 'Gateway Time-out'; break;
        case 505: $text = 'HTTP Version not supported'; break;
        default:
            exit('Unknown http status code "' . htmlentities($code) . '"');
        break;
    }

    $protocol = (isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0');

    header($protocol . ' ' . $code . ' ' . $text);
}
